// utils/wx.js - 微信相关工具函数

// 检查是否在微信环境中
export const isWechat = () => {
  const ua = navigator.userAgent.toLowerCase();
  return ua.indexOf('micromessenger') !== -1;
};

// 获取微信配置
export const getWxConfig = async (url) => {
  try {
    // 这里需要调用后端接口获取微信配置参数
    // 实际项目中，应该替换为真实的API调用
    const response = await uni.request({
      url: 'http://your-api.com/wx/config',
      method: 'GET',
      data: { url: url || window.location.href.split('#')[0] }
    });
    
    return response.data;
  } catch (error) {
    console.error('获取微信配置失败:', error);
    return null;
  }
};

// 初始化微信SDK
export const initWxSDK = async (config = null) => {
  // 确保在微信环境中
  if (!isWechat()) {
    console.warn('当前环境不是微信环境');
    return false;
  }
  
  try {
    // 如果没有提供配置，自动获取
    const wxConfig = config || await getWxConfig();
    
    if (!wxConfig || !wxConfig.appId) {
      console.error('微信配置无效');
      return false;
    }
    
    // 使用uni-app的wx对象
    return new Promise((resolve, reject) => {
      wx.config({
        debug: false, // 生产环境建议关闭debug
        appId: wxConfig.appId,
        timestamp: wxConfig.timestamp,
        nonceStr: wxConfig.nonceStr,
        signature: wxConfig.signature,
        jsApiList: [
          'checkJsApi',
          'onMenuShareTimeline',
          'onMenuShareAppMessage',
          'onMenuShareQQ',
          'onMenuShareWeibo',
          'hideMenuItems',
          'showMenuItems',
          'hideAllNonBaseMenuItem',
          'showAllNonBaseMenuItem',
          'translateVoice',
          'startRecord',
          'stopRecord',
          'onRecordEnd',
          'playVoice',
          'pauseVoice',
          'stopVoice',
          'uploadVoice',
          'downloadVoice',
          'chooseImage',
          'previewImage',
          'uploadImage',
          'downloadImage',
          'getNetworkType',
          'openLocation',
          'getLocation',
          'hideOptionMenu',
          'showOptionMenu',
          'closeWindow',
          'scanQRCode',
          'chooseWXPay',
          'openProductSpecificView',
          'addCard',
          'chooseCard',
          'openCard'
        ]
      });

      wx.ready(() => {
        resolve(true);
      });

      wx.error((res) => {
        console.error('微信SDK初始化失败:', res);
        reject(res);
      });
    });
  } catch (error) {
    console.error('微信SDK初始化异常:', error);
    return false;
  }
};

// 获取微信用户授权信息（H5环境）
export const getWechatUserProfile = async () => {
  try {
    // 1. 静默授权获取code
    const code = getUrlParam('code');
    
    if (!code) {
      // 如果没有code，跳转到授权页面
      // 正式环境配置：使用实际的appId和固定的正式域名
      const appId = 'wxa716d55a76960a75'; // 已配置的真实appId
      // 固定使用正式域名，确保与微信公众平台配置一致
      const currentPath = window.location.pathname + window.location.search;
      const redirectUri = encodeURIComponent('http://h5.henanguanhao.com' + currentPath);
      const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
      window.location.href = authUrl;
      return null; // 这里会跳转页面，不会继续执行
    }
    
    // 2. 使用code换取用户信息
    // 实际项目中，应该发送code到后端换取openId和用户信息
    return { code };
  } catch (error) {
    console.error('获取微信授权信息失败:', error);
    throw error;
  }
};

// 获取URL参数
export const getUrlParam = (name) => {
  const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`);
  const r = window.location.search.substr(1).match(reg);
  if (r != null) return unescape(r[2]);
  return null;
};

// 微信支付
export const wxPay = async (payParams) => {
  return new Promise((resolve, reject) => {
    // 确保在微信环境中
    if (!isWechat()) {
      reject(new Error('请在微信环境中支付'));
      return;
    }
    
    // 初始化微信SDK（如果尚未初始化）
    initWxSDK().then(() => {
      wx.chooseWXPay({
        timestamp: payParams.timestamp,
        nonceStr: payParams.nonceStr,
        package: payParams.package,
        signType: payParams.signType || 'MD5',
        paySign: payParams.paySign,
        success: function (res) {
          resolve(res);
        },
        cancel: function (res) {
          reject(new Error('支付取消'));
        },
        fail: function (res) {
          reject(new Error('支付失败: ' + JSON.stringify(res)));
        }
      });
    }).catch(error => {
      reject(error);
    });
  });
};

// 分享到朋友圈
export const shareToTimeline = (config = {}) => {
  if (!isWechat()) {
    console.warn('当前环境不是微信环境');
    return false;
  }
  
  wx.onMenuShareTimeline({
    title: config.title || document.title,
    link: config.link || window.location.href,
    imgUrl: config.imgUrl || '',
    success: function () {
      if (config.success) config.success();
    },
    cancel: function () {
      if (config.cancel) config.cancel();
    }
  });
  
  return true;
};

// 分享给朋友
export const shareToFriend = (config = {}) => {
  if (!isWechat()) {
    console.warn('当前环境不是微信环境');
    return false;
  }
  
  wx.onMenuShareAppMessage({
    title: config.title || document.title,
    desc: config.desc || '',
    link: config.link || window.location.href,
    imgUrl: config.imgUrl || '',
    type: config.type || 'link',
    dataUrl: config.dataUrl || '',
    success: function () {
      if (config.success) config.success();
    },
    cancel: function () {
      if (config.cancel) config.cancel();
    }
  });
  
  return true;
};

// 检查是否已登录
export const checkWechatLogin = async () => {
  try {
    // 实际项目中，这里应该检查本地是否有token，或者调用接口检查登录状态
    // 这里仅作示例
    const token = uni.getStorageSync('token');
    return !!token;
  } catch (error) {
    console.error('检查微信登录状态失败:', error);
    return false;
  }
};